package com.huluobo.mvvmdemo2006a.viewmodels;

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

import com.huluobo.mvvmdemo2006a.model.CartItem;
import com.huluobo.mvvmdemo2006a.model.Product;
import com.huluobo.mvvmdemo2006a.repo.CartRepo;
import com.huluobo.mvvmdemo2006a.repo.ShopRepo;

import java.util.List;

/**
 * Created by lc on 2023/1/6.
 * 整个项目的ViewModel,视图的数据模型
 * ViewModel本身不产生数据,作为数据交换者,需要通过M层获取数据,对外暴露方法,可以提供给V层
 */
public class ShopViewModel extends ViewModel {
    ShopRepo shopRepo = new ShopRepo();

    CartRepo cartRepo = new CartRepo();

    //跳转时传递的商品对象
    MutableLiveData<Product> product = new MutableLiveData<>();

    //拿到所有商品的列表
    public LiveData<List<Product>> getProducts() {
        return shopRepo.getProducts();
    }

    //拿到商品对象
    public LiveData<Product> getProduct() {
        return product;
    }

    //设置商品对象
    public void setProduct(Product product) {
        this.product.setValue(product);
    }

    //获取所有购物车的数据
    public LiveData<List<CartItem>> getCart() {
        return cartRepo.getCart();
    }

    //添加商品到购物车
    public boolean addProductToCart(Product product) {
        return cartRepo.addItemToCart(product);
    }

    //删除购物车中商品的方法
    public void removeItemFromCart(CartItem cartItem) {
        cartRepo.removeItemFromCart(cartItem);
    }

    //修改商品数量的方法
    public void changeQuantity(CartItem cartItem, int quantity) {
        cartRepo.changeQuantity(cartItem, quantity);
    }

    //获取购物车中总价的方法
    public LiveData<Double> getTotalPrice() {
        return cartRepo.getTotalPrice();
    }

    public void resetCart() {
        cartRepo.initCart();
    }
}
